package com.aizhixin.test.question.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.aizhixin.test.question.dao.AllAnswerRecordDAO;
import com.aizhixin.test.question.dao.answerEverydayDAO;
import com.aizhixin.test.question.dao.judgeDAO;
import com.aizhixin.test.question.dto.AllAnswerRecordDTO;
import com.aizhixin.test.question.dto.anserEverydayDTO;
import com.aizhixin.test.question.dto.judgeQuestionNeedDTO;

@Service
@Transactional
public class JudgeAndChangeDateService {
/*
 * 
 *
 */
	@Autowired
	private AllAnswerRecordDAO allAnswerRecordDAO;
	@Autowired
	private judgeDAO judgeDAO;
	//先展示dto层
	public judgeQuestionNeedDTO service(Long userId,Long steamId,String userAnser) {//执行一个事务，可以让改表一改则全改，一停全清
		judgeQuestionNeedDTO judgeQuestionNeedDTO=new judgeQuestionNeedDTO();
		judgeQuestionNeedDTO=setJudgedto(userId, steamId, userAnser);//判断答案是否相等，konkledge和Rightanser，和point加入其中
		judgeQuestionNeedDTO=addAnserRecord(judgeQuestionNeedDTO);//添加回答记录，这个回答记录是没有0分治后不能减分的要求的，只是记录且至于增加数据
		changeOrAddAllrrecord(judgeQuestionNeedDTO);//这个是修改或添加总记录，
		//这个需要判定，如果这个用户第一次回答问题，查不到以ta的userid为记录的信息，就是建表，反之则为修改表里面的信息
		changeOrAddEveryDayRecord(judgeQuestionNeedDTO);
		//这个是增加或者修改每日记录，查询了当日有无记录，有改，无增
		return judgeQuestionNeedDTO;//改完之后还是把这个返还给前端，让前端，获取到里面的对错，得分情况等显示在界面上
	}
	
	/*已完成
	 * 通过传入user，stamid，userAnser
	 * stamid查找t_question里面的anser和konledge存入judgeDTO里面
	 * 判断anser和rightanser是否相等，存入judge的DTO里面同时将分值point存进去ifElse
	 */
	public judgeQuestionNeedDTO setJudgedto(Long userId,Long stamId,String UserAnser) {
		judgeQuestionNeedDTO dto=new judgeQuestionNeedDTO();
		dto=judgeDAO.getRightAnserAndKonledge(userId,stamId,UserAnser);//查konkledge和Rightanser
		if(dto.getRightAnser().equals(dto.getUserAnser())) {//判断anser和rightanser是否相等，存入judge的DTO里面同时将分值point存进去ifElse
			dto=judgeDAO.setRightWayAddPointAndRightOrNot(dto);	//根据对错来给分值，
		}
		else {
			dto=judgeDAO.setErrolWay(dto);
		}
		return dto;
	}
	
	//已完成
	 /*传入刚刚的dto之后
	  *  然后用insert在anserRecord里面加入这条数据
	 * 
	 */
	public judgeQuestionNeedDTO addAnserRecord(judgeQuestionNeedDTO dto) {
		dto=judgeDAO.insertAnserdto(dto);
		return dto;
	}
	/*已完成
	 * 判断根据传过来的dto中的userID看是否存在了（查all的那张表）
	 * 存在=》改表
	 * 不存在=》增数据
	 */
	public int changeOrAddAllrrecord(judgeQuestionNeedDTO dto) {
		
		List<AllAnswerRecordDTO> dto1= allAnswerRecordDAO.getuserEveryDayAnserImforMation(dto.getUserid());//完成
		int m;
		if( null == dto1) {
			
			m=judgeDAO.addAllRecord(dto);
		}
		else {
			
		 m=judgeDAO.changeAllRecord(dto);
		}
		
		return m;
	}
	
	/*已完成
	 * 根据userId和date判断是否存在（everday）数据，
	 * 1.查
	 * 2.存在=》增数据，不存在=》改数据
	 * 成功返回200
	 */
	@Autowired 
	answerEverydayDAO answerEverydayDAO;
	public int changeOrAddEveryDayRecord(judgeQuestionNeedDTO dto) {
	
	List<anserEverydayDTO> dto1 =answerEverydayDAO.getuserEverdayHaveOrNotByUserIdAndDate(dto);//完成
	int m;
	if (null == dto1) {
		m=answerEverydayDAO.addanserEveryday(dto);
	}
	else {
		m=answerEverydayDAO.changeAnserEveryday(dto);
	}
		return m;
	}
}
